package com.ruoyi.system.mapper;

import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.system.domain.ArchiveTask;
import com.ruoyi.system.domain.vo.ArchiveTaskVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 归档任务Mapper接口
 *
 * @author ruoyi
 * @date 2024-12-06
 */
public interface ArchiveTaskMapper extends BaseMapperPlus<ArchiveTaskMapper, ArchiveTask, ArchiveTaskVo> {

    /**
     * 创建临时表
     *
     * @param tempTable   临时表名
     * @param sourceTable 源表名
     * @param script      脚本
     */
    void createTempTable(@Param("tempTable") String tempTable, @Param("sourceTable") String sourceTable,
                         @Param("sourcePk") String sourcePk, @Param("script") String script);

    /**
     * 查询 > id 的数据
     *
     * @param table   表名
     * @param startPk
     * @return
     */
    List<Map<String, Object>> queryDataByIds(@Param("table") String table, @Param("pk") String pk,
                                             @Param("fields") String fields, @Param("startPk") Object startPk,
                                             @Param("endPk") Object endPk, @Param("batchSize") int batchSize);

    /**
     * 删除临时表
     *
     * @param tempTable 临时表名
     */
    void deleteTempTable(String tempTable);

    /**
     * 删除归档数据
     *
     * @param sourceTable
     * @param sourcePk
     * @param minPk
     * @param maxPk
     */
    void deleteArchiveDate(@Param("sourceTable") String sourceTable, @Param("sourcePk") String sourcePk,
                           @Param("minPk") Object minPk, @Param("maxPk") Object maxPk);

    /**
     * 要归档的数据范围
     *
     * @param sourceTable
     * @param sourcePk
     * @param script
     * @return
     */
    Map<String, Object> getRangeDate(@Param("sourceTable") String sourceTable, @Param("sourcePk") String sourcePk,
                                     @Param("script") String script);

    /**
     *
     * @param sourceTable
     * @param sourcePk
     * @param fields
     * @param pk
     * @return
     */
    List<Map<String, Object>> queryDataById(@Param("table")String sourceTable, @Param("pk")String sourcePk,
                                            @Param("fields")String fields, @Param("id")Object id);
}
